<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>面向对象</title>
</head>
<body>
    <script>
        //1.声明全局函数Foo
        function Foo() {
            //声明全局变量getName : 本质给Window添加getNamme方法
            getName = function (){
                console.log(1);
            };
            /*没有使用new :this指向window
            使用new ： this指向new创建的空对象（实例化）
            */
        return this;
        }
        //2.给Foo添加静态成员 ：getName
        Foo.getName = function (){
            console.log(2);
        }
        //3.给Foo添加原型方法getName
        Foo.prototype.getName = function (){
            console.log(3);
        }
        //4.声明全局函数getName
        var getName = function() {
            console.log(4);
        };
        //5.声明全局函数getName(被var覆盖)
        function getName() {
            console.log(5);
        }
        /* 题目 */
        //1.调用Foo函数对象自己的方法
        Foo.getName();//2
        //2.调用全局函数
        getName();//4
        //3.调用Foo() 返回window
        Foo().getName;//1
        //4.调用全局函数 getName
        getName();//1
        //5. new Foo.getName :这里并没有调用Foo,所以其实是调用Foo函数对象自己的getName
        new Foo.getName()//2
        //6. new Foo() :返回实例化对象 调用getName访问原型中的方法
        new Foo().getName;//3
        //7. 相当于new (new Foo.getName()) 与6中的this指向有区别
        new new Foo().getName();//3
    </script> 
</body>
</html>